package com.naxiang.cn.utils;

import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.media.ThumbnailUtils;
import android.os.Build;
import android.os.Environment;
import android.support.annotation.RequiresApi;

import java.io.File;
import java.io.FileOutputStream;

/**
 * 作者: 赵航
 * 创建时间: 2018/7/11 17:14
 * 描述:
 */
public class BitmapUtils {
    @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD_MR1)
    public static Bitmap getVoideThumb(String path, long time) {
        MediaMetadataRetriever media = new MediaMetadataRetriever();
        media.setDataSource(path);
        //在给定的时间，检索最近一个帧,这个帧不一定是关键帧。
        return media.getFrameAtTime(time, MediaMetadataRetriever.OPTION_CLOSEST);
    }

    //    使用MediaMetadataRetriever获取视频的第一帧作为缩略图
    @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD_MR1)
    public static Bitmap getVoidImage(String path) {
        MediaMetadataRetriever media = new MediaMetadataRetriever();
        media.setDataSource(path);
        return media.getFrameAtTime();
    }


    /**
     * 获取视频的缩略图
     * 先通过ThumbnailUtils来创建一个视频的缩略图，然后再利用ThumbnailUtils来生成指定大小的缩略图。
     * 如果想要的缩略图的宽和高都小于MICRO_KIND，则类型要使用MICRO_KIND作为kind的值，这样会节省内存。
     *
     * @param videoPath 视频的路径
     * @param width     指定输出视频缩略图的宽度
     * @param height    指定输出视频缩略图的高度度
     * @param kind      参照MediaStore.Images(Video).Thumbnails类中的常量MINI_KIND和MICRO_KIND。
     *                  其中，MINI_KIND: 512 x 384，MICRO_KIND: 96 x 96
     * @return 指定大小的视频缩略图
     */
    public static Bitmap getVideoThumbnail(String videoPath, int width, int height, int kind) {
        Bitmap bitmap = null;
        // 获取视频的缩略图
        bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind); //調用ThumbnailUtils類的靜態方法createVideoThumbnail獲取視頻的截圖；
        if (bitmap != null) {
            bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
                    ThumbnailUtils.OPTIONS_RECYCLE_INPUT);//調用ThumbnailUtils類的靜態方法extractThumbnail將原圖片（即上方截取的圖片）轉化為指定大小；
        }
        return bitmap;
    }

    /**
     * 保存bitmap到本地
     * @param mBitmap
     * @return
     */
    public static String saveBitmap(Bitmap mBitmap) {
        String name=  Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                .getPath() + "/NaXiang-" + System.currentTimeMillis()+".jpg";
        File file = new File(name);
        FileOutputStream out;
        try {
            out = new FileOutputStream(file);
            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("出现异常了"+e);
        }

        return name;
    }
}
